создать новую таблицу, имеющую отношение многие к одному между двумя другими таблицами. - PullRequest
1 голос
/ 12 апреля 2010

У меня есть две таблицы, одна таблица содержит столбец rowguid, а другая - столбец с автоинкрементом, но обе таблицы не имеют первичного или внешнего ключа. Я хочу создать третью таблицу, которая хранит отношения между двумя таблицами выше. может кто-нибудь дать мне правильный и самый простой способ сделать это. Я новичок с использованием сервера SQL. пожалуйста, ответьте мне

Ответы [ 2 ]

0 голосов
/ 13 апреля 2010

Амби, никогда не делай ничего с базой данных, кроме как через скрипт. Использование интерфейса с графическим интерфейсом является очень плохой практикой, и вам нужно избавиться от привычки прямо сейчас. Вам нужны вещи в сценариях, чтобы вы могли поместить их в систему контроля версий и использовать их для развертывания на других серверах.

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

Вам также нужен какой-то способ определить, как соотносятся две таблицы. Как узнать, какая запись в таблице должна совпадать с какой записью в таблице? Поскольку у вас есть два разных типа данных, это не взаимосвязь, поэтому вам нужно иметь какое-то другое поле (или комбинацию полей), которое одинаково в обеих таблицах для построения взаимосвязи. Если у вас нет этого, что является основой отношений. Пожалуйста, покажите образцы данных в обеих таблицах и покажите, какие данные вам нужны в таблице мостов. Я считаю, что вы еще недостаточно продумали дизайн стола, основываясь на том, что вы разместили.

0 голосов
/ 12 апреля 2010

Во-первых, вам нужно будет выяснить, как эти таблицы связаны друг с другом. Для этого должно быть какое-то бизнес / логическое правило, и это будет исходная ассоциация.

Тогда вы можете попробовать что-то вроде

DECLARE @TableGuid TABLE(
        GuidID UNIQUEIDENTIFIER DEFAULT NEWID(),
        Val VARCHAR(10)
)

DECLARE @TableID TABLE(
        ID INT IDENTITY(1,1),
        Val VARCHAR(10)
)

INSERT @TableGuid (Val) SELECT 'A'
INSERT @TableID (Val) SELECT 'A'

SELECT * FROM @TableGuid
SELECT * FROM @TableID

DECLARE @TableManyMany TABLE(
        GuidID UNIQUEIDENTIFIER,
        ID INT,
        PRIMARY KEY(GuidID, ID)
)

INSERT INTO @TableManyMany
SELECT  GuidID,
        ID
FROM    @TableGuid g INNER JOIN
        @TableID i ON g.Val = i.Val

SELECT  *
FROM    @TableManyMany
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...