Как преобразовать отношение 1: 1 в отношение 1: N - PullRequest
1 голос
/ 02 апреля 2019

У меня есть плохо реализованный SQL и несколько вопросов.

1. кажется, что fk не работает хорошо, я должен сделать отдельные запросы, чтобы добавить значение во все таблицы,

  1. первая таблица странная, но правильная, она должна быть отделена от других (я должен добавить, отменить, изменить) одновременно во вкладках tabList и tabSE.

  2. Мне нужно реализовать соотношение 1: N между tabSE и tabSD (не знаю, как это сделать), практически цель состоит в том, чтобы выбрать (сформировать c # bla bla bla) несколько элементов, нажать кнопку «Пуск». и сохраните информацию о том, что в день, мм / дд / гггг, я запустил элементы (нажав на кнопку «Старт»), например, с идентификатором (1,5,3,6,8) и старт получил результат, бла бла бла, и день закончился мм / дд / гггг. Я думаю, что, может быть, Union не имеет смысла, а из tabSD, может, Nome, я не должен существовать, не знаю. Помощь

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Сверху вниз:

  1. Если у вас есть FK между tabStoreExec и tabStoricoDetail, автоматически можно выполнить только 2 действия: ОБНОВЛЕНИЕ и DELETE с ключевым словом (или опцией настройки таблицы) CASCADE

  2. Я полагаю, что это «временная» таблица, используемая в качестве утилиты интерфейса.

  3. Для создания 1: N.Я думаю, что лучше всего удалить таблицу Union , тогда вы должны создать составной ключ на tabStoricoDetail , например, id и idDetail, и позволить FK выполнить свою работу, связывая только идентификаторыобе таблицы:

    tabStoreExec.idSE -> tabStoricoDetail.id
    

Я даю вам CREATE TABLES пример кода, который будет работать, как вы хотите:

CREATE TABLE tabStoreExec (
    idSE INT --PRIMARY KEY --Coul be done here, but can't be named
    , nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
    , DateStarSE DATE --or DATETIME, depends if you want the time too
    , DateEndSE DATE
    , CONSTRAINT PK_tabStoreExec PRIMARY KEY (id)
    , CONSTRAINT FK_tabStoreExec_idSE_id FOREIGN KEY (idSE) REFERENCES tabStoricoDetail(id) ON DELETE CASCADE ON UPDATE CASCADE --use this in case you want to propagate the delete/update action from this table to referenced.
);

CREATE TABLE tabStoricoDetail (
    id INT
    , idDetail INT
    , nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
    , resItemDet VARCHAR(100)
    , CONSTRAINT PK_tabStoricoDetail PRIMARY KEY (id, idDetail)
); 

Я надеюсьэто может быть полезно для вас.

Редактировать: Да, таблица объединения может исчезнуть.

FK - это «соединитель» между обеими таблицами, он дает вамцелостность данных, и составной ПК может иметь отношение 1: N.Я даю вам пример схемы для лучшей помощи:

Пример схемы

0 голосов
/ 02 апреля 2019

Вообще говоря, вы должны ограничить свой пост одним вопросом, а не кратным. Такой пост сложно обсудить на форуме. Ваш вопрос также охватывает много разных областей. Я предлагаю вам сосредоточиться в первую очередь на конкретной области - в частности, на схеме. Как только схема является адресной, вы можете начать определять интерфейс, который хотите предоставить.

А комментарии типа "вроде не очень хорошо работают" бесполезны. Единственный человек, который понимает это в любой детали, это ВЫ.

На данный момент ваша схема реализует отношение M: M между tabStoreExec и tabStoricoDetail. И ради любви будущих поколений, действительно ДЕЙСТВИТЕЛЬНО учитывайте свои стандарты именования. Вам не нужен стандарт именования, где тип объекта является первой частью каждого имени IMO. Понятия не имею, что означает «StoreExec». / Рант

Но прежде чем идти дальше, объясните, почему вы создали таблицу «Союз» (еще один неправильный выбор имен). Эта таблица соединений является механизмом, используемым для реализации отношения M: M. Была ли причина для этого? Ты передумал? Какие-то другие трудности?

Если вы хотите, чтобы отношение 1: M, вы удалили эту таблицу и просто добавили столбец внешнего ключа в tabStoricoDetail в tabStoreExec. Я предлагаю вам изучить примеры баз данных, которые Microsoft создала для демонстрации функциональности SQL Server - AdventureWorks и World Wide Importers . AdventureWorks изначально разрабатывался для версии 2005 года, но до сих пор является распространенной ссылкой. Используйте эти примеры того, как определять схемы.

...