在SQL中创建表,其中每个元组可以有多个值

时间:2014-10-17 17:05:12

标签: mysql sql database create-table

我尝试在SQL中使用Create Table创建一个表, 一个人可以在多个地方工作,一个地方可以有多个人工作, 这就是我想要的,我确定它不正确

      create table ( person char(15), place char(15), salary int)

现在因为一个人可以在多个地方工作,如果元组位置有多个值,我会感到困惑, 如是。我该怎么做 提前致谢

3 个答案:

答案 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'

这样您就不需要在同一元组中保存多个值。