我尝试在SQL中使用Create Table创建一个表, 一个人可以在多个地方工作,一个地方可以有多个人工作, 这就是我想要的,我确定它不正确
create table ( person char(15), place char(15), salary int)
现在因为一个人可以在多个地方工作,如果元组位置有多个值,我会感到困惑, 如是。我该怎么做 提前致谢
答案 0 :(得分:2)
它被称为 n到m关系。使用3个表
persons table
-------------
id int
name varchar
places table
------------
id int
name varchar
place_persons table
-------------------
place_id int
person_id int
答案 1 :(得分:1)
您应该创建三个单独的表:
"persons"
int ID (primary key, auto-increment)
varchar username
varchar email ... (all other info needed)
"places"
int ID (primary key, auto-increment)
varchar name
etc.
第三个表格给出了两者之间的关系:
"person_places" (or place_persons, depends on what you like)
int ID (primary key, auto-increment)
int place_id (linked to the ID of the "places" entry)
int person_id (linked to the ID of the "persons" entry)
这样,每当一个人开始在新的地方工作时,你只需在" person_places"中添加一个条目。当他们离开一个地方,或者一个地方破产或者其他什么时,你只需触摸" person_places"表
另外,这样一个人可以在几个地方工作,就像一个地方可以有几个人一起工作。
答案 2 :(得分:0)
这不是标准化的,但可以使用它,因为你只有3列,并且规范化会增加连接和额外列的头痛来定义关系。
假设PersonA在PlaceA和PlaceB中都有效。 PersonB也适用于两个地方,但工资不同,那么你的数据将是这样的
insert into Yourtable values
('PersonA','PlaceA',1000),
('PersonA','PlaceB',2000),
('PersonB','PlaceA',1100),
('PersonB','PlaceB',1200),
('PersonC','PlaceA',1000)
如果您想知道PersonA的工作地点,那么您的查询将是
select place from YourTable where person = 'PersonA'
这样您就不需要在同一元组中保存多个值。