Создание связи 1 к 1

anfiska
Дата: 14.09.2006 14:11:28
Люди добрые, можно ли в MS SQLсоздать связь между таблицами один к одному. Я хочу образы всех первичных документов хранить в одной таблице, а атрибуты этих документов (дата создания, номер, сумма) в другой. Целесообразно ли такое решение, может кто уже сталкивался с такой проблемой?
Prolog
Дата: 14.09.2006 14:30:40
Создать можно. Если под образом подразумевается картинка, текст и т.п. то может быть их хранить на диске в виде файлов, а в единой таблице хранить путь и имя файла. Можно "обрах" хранить единой таблице в blob-столбце, но сам столбец разместить в ином файле базы данных, чем столбцы с аттрибутами.
anfiska
Дата: 14.09.2006 15:08:56
При хранении образов в SQL проще достать все другие документы и их образы, относящиеся к исходному. Например, есть договор, а к нему целая куча попутных и производимых документов: счета, счета-фактуры, акты и т.д. поэтому с файловой системой хранения организовывать не хотелось бы.
Проясните про blob-столбец и как разместить в другом файле БД. Я начинающий программист в SQL и еще многого не знаю.
GreenSunrise
Дата: 14.09.2006 15:15:02
CREATE TABLE, читать про параметр TEXTIMAGE_ON. Создайте отдельную файловую группу, и укажите ее в этом параметре.
Gerros
Дата: 14.09.2006 16:09:16
anfiska
можно ли в MS SQL создать связь между таблицами один к одному?

Можно. Для этого на внешний ключ нужно наложить ограничения NOT NULL и UNIQ:
create table Entity (
  e_id int primary key clustered,
  e_name varchar( 10)
)
create table E_Properties (
  e_id int foreign key references Entity( e_id) not null unique clustered,
  value varchar( 100)
)
--Создаём сущность
insert Entity values( 1, 'apple')
--Добавляем свойство...
--Так можно:
insert E_Properties values( 1, 'red')
--Так нельзя:
insert E_Properties values( 1, 'green')
insert E_Properties values( null, 'yellow')
insert E_Properties values( 2, 'black')

select * from Entity join E_Properties on E_Properties.e_id = Entity.e_id