Это реляционная модель для базы данных ООП, что из этого лучше?:
Примечание: -> этот операнд используется для определения внешнего ключа, например (field-> table (reference))
Первый
**
атрибут (id: auto, имя_атрибута)
type
(id:auto, type_name)
type_attribute
(id:auto, type_code->type(id), attribute_id->attribute(id), default_value)
object
(id:auto, name, object_type->type(id))
object_property
(id:auto, object_id->object(id), attribute_id->attribute(id), my_value)
**
Второй
атрибут (id: auto, имя_атрибута)
type (id: auto, type_name)
type_attribute (id: auto, type_code-> type (id), attribute_code-> attribute (id), default_value)
object (id: auto, name, object_type-> type (id))
object_property (id: auto, (object_id, object_type) -> object (id, object_type), (object_type, attribute_id) -> type_attribute (id, attribute_id), my_value)
Действительно, разница четко видна в таблице object_property.
В первой модели вы можете определить свойство, используя код и код атрибута, проблема здесь в том, что вы можете определить элементы, которые тип не определяет атрибут для типа объекта.Однако эту модель проще всего использовать, поскольку для определения объекта object_property вам понадобятся только два кода, например:
INSERT INTO object_property(object_code, attribute_code, my_value)
VALUES (3,4,'myvalue')
Во второй модели вы можете определить свойство, используя более согласованные данные, используя object_code, object_type иattribute_code.Однако вам нужно использовать три кода и дополнительный запрос, подобный этому:
INSERT INTO object_property(object_code, object_type, attribute_code)
VALUES (3, (select object_type from object where code = 3), 4, 'my_value')
Какой лучше?