-1
students
-------
name
age
email
colA
colB
colC

teachers
-------
name
age
email
colD
colE

parents
-------
name
age
email
colF
colG
colH
colI

对于上述设计,我应该只创建一个带有额外列的user_type表还是创建 3 个表?将有数百万条数据要插入。如果我只为他们使用一张桌子,我会担心性能。我需要这里的 mysql 大师的建议。

请指教。谢谢。

4

4 回答 4

1

您基本上有一个要在关系数据库中建模的用户继承结构。查看以下有关不同方法的文章:

  1. 单表继承(您的第一个选项:“一个表”)
  2. 类表继承
  3. 具体表继承(您的第二个选项:“三个表,每个包含公共属性”)

stackoverflow 上有很多关于这个主题的问题和答案。

于 2013-05-21T16:10:59.697 回答
1

如果我要设计一张桌子,我宁愿在两张桌子上做。

用户类型

- TypeID (Primary Key)
- TypeDescription

用户

- UserID (Primary Key)
- TypeID (Foreign Key)
- ColA (nullable)
- ColB (nullable)
- ColC (nullable)
- ColD (nullable)
- ColE (nullable)
- ColF (nullable)
- ColG (nullable)
- ColH (nullable)
- ColI (nullable)
于 2013-05-21T16:07:27.677 回答
1

我更喜欢尽可能避免可以为空的列,所以我会这样做:

persons  (or people if you prefer)
-------
name
age
email


students
-------
person_id
colA
colB
colC

teachers
-------
person_id
colD
colE

parents
-------
person_id
colF
colG
colH
colI
于 2013-05-21T16:12:41.557 回答
1

我将创建一个用户表和一个单独的用户类型表,通过外键链接。任何半体面的 DBMS 的性能都会很好,实际上插入 3 个单独的表可能会稍微差一些。此外,搜索这些表的性能会更差,因为您必须union在查询中使用它们。

此设计假定所有用户都具有与其关联的相同元数据。如果不同的用户被视为不同的实体并因此具有不同的元数据,那么将它们存储在 3 个不同的表中会更合乎逻辑。但是,您仍然可以选择将它们放在一个表中,其中包含每个用户的所有元数据列,并且性能会很好。

于 2013-05-21T16:08:46.587 回答