2013-05-21 2 views
-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.Предложения для MySQL table

сообщите пожалуйста. спасибо.

+0

у вас есть школа с миллионами студентов ??? :-) Но во всей серьезности ответ заключается в том, что здесь есть много «правильных» ответов; это зависит от того, как данные будут использоваться. В целом, хотя наличие нескольких типов, похожих на данные в одной таблице, не является проблемой производительности, если его правильно проиндексировать, поэтому, если это ваши критерии для разделить его на три таблицы, то не беспокойтесь об этом. – Spudley

+0

База данных, которую я создаю, не связана со школой. это просто пример. –

ответ

1

Если бы я должен был разработать таблицу, я бы скорее сделал это в двух таблицах.

UserType

- 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) 
1

Я хотел бы создать одну таблицу пользователей, и отдельный тип пользователя таблицы, связанный через внешний ключ. Производительность любой полупристойной СУБД будет хорошей и может быть немного хуже вставлять в 3 отдельные таблицы. Кроме того, поиск по этим таблицам будет иметь худшую производительность, поскольку в ваших запросах вам понадобится union.

Этот проект предполагает, что все пользователи имеют те же самые метаданные, связанные с ними. Если разные пользователи рассматриваются как разные сущности и поэтому имеют разные метаданные, было бы логичнее хранить их в трех разных таблицах. Тем не менее, вы все равно можете выбрать их в одной таблице со всеми столбцами метаданных для каждого пользователя, и производительность будет прекрасной.

1

В основном у вас есть пользователь Наследование Структура, которую вы хотите смоделировать в реляционной базе данных. Проверьте следующие статьи по-разному, чтобы сделать это:

  1. Single Table Inheritance (первый вариант: «один стол»)
  2. Class Table Inheritance
  3. Concrete Table Inheritance (ваш второй вариант: «три таблицы, каждая из которых содержит общие атрибуты ")

Есть много вопросов и ответов на stackoverflow по этой теме.

1

Я предпочитаю, чтобы избежать 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 
Смежные вопросы