Таблица базы данных для каждого типа с эксклюзивными подтипами

В таблице для архитектуры типа, скажем, у меня есть тип «Человек» с двумя подтипами «ученик» и «учитель». Ученик не может быть учителем, а учитель не может быть учеником.

Ниже приведен лучший способ, который я знаю, как настроить их до сих пор:

Geometry
  ID int, PK
  Name string

Point
  ID int, PK, FK
  X float
  Y float

Line
  ID int, PK, FK
  StartPoint int, FK
  EndPoint int, FK

Обратите внимание, что для подтипов первичный ключ также является внешним ключом для геометрии. Как я могу гарантировать, что не существует геометрии, которая является и точкой, и линией? Есть ли какое-то взаимоисключающее ограничение?

Если единственное решение состоит в том, чтобы использовать что-то вроде триггеров, зависящих от поставщика, мне лучше сделать это или применить это где-то в другом месте, например, при общении позже или у клиента?

Спасибо!


person Eric    schedule 28.03.2013    source источник
comment
Итак, вы считаете идею о том, что человек не может быть одновременно учителем и учеником, проблемой целостности данных, а проблемой логики? Разве это не избыточно иметь это перечисление? Это не риторические вопросы, я действительно не знаю, что лучше   -  person Eric    schedule 29.03.2013
comment
Может я слишком абстрактно мыслю, если это вуз или что-то явно не то, но в любом вузе это конечно возможно. Если они такие совершенно отдельные, почему они наследуются от Person вместо того, чтобы просто создавать 2 таблицы, Teacher и Student?   -  person Jeremy Holovacs    schedule 29.03.2013
comment
На самом деле я работаю над совсем другой базой данных. В моей базе данных подтипы абсолютно исключительны. Я отредактирую пост, чтобы уточнить   -  person Eric    schedule 29.03.2013
comment
в этом случае я бы сказал, что нет большой ценности в том, чтобы оба класса наследуются от Geometry... без веской причины, иначе я бы сделал их полностью отдельными объектами без общей базы и покончил с этим.   -  person Jeremy Holovacs    schedule 29.03.2013
comment
В моей фактической базе данных есть сотни таблиц со многими ситуациями, когда супертипы с эксклюзивными подтипами не только полезны, но и абсолютно необходимы. Поскольку я не могу поместить всю свою модель базы данных в сообщение, я придумал простой пример, демонстрирующий архитектуру.   -  person Eric    schedule 29.03.2013


Ответы (1)


Здесь, в StackOverflow и у администраторов баз данных, есть несколько похожих вопросов, которые могут послужить хорошим ориентиром. См. этот связанный вопрос:

Как смоделировать одну сущность, которая ссылается на одну из нескольких других сущностей в SQL?

person Tim Lentine    schedule 28.03.2013
comment
Это больше подходит как комментарий, чем ответ. - person Gordon Linoff; 29.03.2013
comment
Это определенно привело меня в правильном направлении, и я ценю это :) Я не против собрать свои результаты в ответ и опубликовать его, как только я это понял. - person Eric; 29.03.2013
comment
stackoverflow.com /questions/4896831/ этот парень, кажется, знает свое дело - person Eric; 29.03.2013