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 大师的建议。
请指教。谢谢。
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 大师的建议。
请指教。谢谢。
如果我要设计一张桌子,我宁愿在两张桌子上做。
用户类型
- 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)
我更喜欢尽可能避免可以为空的列,所以我会这样做:
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
我将创建一个用户表和一个单独的用户类型表,通过外键链接。任何半体面的 DBMS 的性能都会很好,实际上插入 3 个单独的表可能会稍微差一些。此外,搜索这些表的性能会更差,因为您必须union
在查询中使用它们。
此设计假定所有用户都具有与其关联的相同元数据。如果不同的用户被视为不同的实体并因此具有不同的元数据,那么将它们存储在 3 个不同的表中会更合乎逻辑。但是,您仍然可以选择将它们放在一个表中,其中包含每个用户的所有元数据列,并且性能会很好。