2012-06-12 2 views
0

Я реализую базу данных продукта, используя модель наследования наследуемой (возможно более поздней классификации) таблицы для атрибутов продукта. Это все работает отлично и хорошо, но я пытаюсь понять, как лучше иметь дело с вариантами продукта, сохраняя ссылочную целостность.Ограничение на имя столбца таблицы (postgresql)

Сейчас упрощенная версия моей основной таблицы продукции выглядит следующим образом:

CREATE TABLE product (

    id  SERIAL   NOT NULL, 
    name VARCHAR(100) NOT NULL, 
    brand VARCHAR(40) NOT NULL, 
    color VARCHAR(40)[] NOT NULL 

) 

(цвет представляет собой массив, так что все стандартные цвета любого данного продукта могут быть перечислены)

Для обработки вариантов Я рассмотрел отслеживание свойства, на которых продукты изменяются в таблице под названием product_variant_theme:

CREATE TABLE product_variant_theme (

    id    SERIAL  NOT NULL, 
    product_id  INT   NOT NULL, 
    attribute_name VARCHAR(40) NOT NULL 

) 

которое я вставлять строки с про channel_id, и добавьте имя столбца для атрибута в поле attribute_name, например. 'цвет'.

Теперь не стесняйтесь сказать мне, является ли это совершенно глупым способом сделать это в первую очередь, но меня беспокоит отсутствие ограничения между атрибутом_имя и фактическим именем столбца. Очевидно, если изменить таблицу продуктов и удалить этот столбец, я все равно могу оставить строки в моей второй таблице, которые относятся к ней. Функциональный эквивалент того, что я ищу, будет чем-то вроде внешнего ключа в атрибуте_name для представления information_schema, которое описывает таблицы, но я не думаю, что есть какой-либо способ сделать это напрямую, и мне интересно, есть ли любой разумный способ получить такую ​​функциональность здесь.

Спасибо.

ответ

1

Вы ищете что-то в этом роде?

product 
======= 
id 
name 


attribute 
========= 
id 
name 


product_attribute_map 
===================== 
product_id 
attribute_id 
value 
+0

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

Смежные вопросы