|
|
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, коллеги. Мой опыт в проектировании БД не велик, поэтому хотел попросить у вас совета. Как грамотнее построить справочник единиц измерения. То что пришло в голову мне. Таблица Measures содержит измерения (длина, объем, масса и др) На нее многие к одному ссылается таблица Units (соотв. единицы измерения, м, см, кг, т и т. п.) Как лучше организовать пересчет из одних единиц в другие? Мой вариант был указывать в таблице меasures название базовой единицы измерения, а в таблице Units для каждой единицы измерения коэффициент пересчета в базовую. Но тогда контролировать целостность (в units обязательно должна быть базовая единица измерения) придется через триггеры, причем содержащие update, insert units, что по моему скромному мнению не есть хорошо. Буду рад вашей критике и предложениям. Да, еще интересно, сталкивался ли кто-нибудь с необходимостью перехода от одного измерения к другому (имеются в виду нефтепродукты и переход от массы к объему). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 12:32 |
|
||
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
В единицах измерения как в многовалютном учете может быть основная единица измерения, а может и не быть - тогда пользователю предоставляется само выбирать единицу измерения в каждом конкретном отчете. Первый вариант проще. CREATE TABLE dbo.UnitType ( Kod int not NULL, ShortName varchar(20) not NULL, FullName varchar(50) not NULL, Koef float not NULL, Parent int NULL, ... ) GO ALTER TABLE dbo.UnitType ADD CONSTRAINT [PK_UnitType] PRIMARY KEY CLUSTERED ( [Kod] ) ON [PRIMARY] GO Parent - ссылка на базовую единицу измерения, Koef - коэфициент к ней, Например: INSERT INTO dbo.UnitType (Kod, ShortName, FullName, Koef, Parent) VALUES (1,'kg','Килограмм',0,NULL) INSERT INTO dbo.UnitType (Kod, ShortName, FullName, Koef, Parent) VALUES (2,'g','Грамм',0.001,1) INSERT INTO dbo.UnitType (Kod, ShortName, FullName, Koef, Parent) VALUES (3,'tn','Тонн',1000,1) INSERT INTO dbo.UnitType (Kod, ShortName, FullName, Koef, Parent) VALUES (4,'lbs','Фунт',0.4536,1) ... ------------------------------------------------------- Люди делятся на 2 категории - те, которые делают бэкапы, и те, которые будут делать бэкапы. (c)Шкшыр скуфь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 12:54 |
|
||
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
Единственный вопрос остался, мониторинг того, чтобы у отца и сына measureId совпадали, осуществлять через триггеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 13:13 |
|
||
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
я имел в виду, как контролировать, чтобы нельзя было пересчитывать сантиметры в килограммы и нужен ли этот запрет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 13:15 |
|
||
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
Или вы предлагаете от сущности Measures вообще отказаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 13:21 |
|
||
|
Справочник единиц измерения
|
|||
|---|---|---|---|
|
#18+
swanotets Единственный вопрос остался, мониторинг того, чтобы у отца и сына measureId совпадали, осуществлять через триггеры я имел в виду, как контролировать, чтобы нельзя было пересчитывать сантиметры в килограммы и нужен ли этот запрет Или вы предлагаете от сущности Measures вообще отказаться? Контроль типа измерения через триггеры на INSERT,UPDATE Эта табличка всегда обычно относиться к ведению администраторов или продвинутых пользователей, добавление новых измерений не такое частое явление, на моей практике ошибки перепривязки типа сантиментров в килограммы в этой таблице встречались редко. ------------------------------------------------------- Люди делятся на 2 категории - те, которые делают бэкапы, и те, которые будут делать бэкапы. (c)Шкшыр скуфь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 14:51 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33444463&tid=1545507]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 503ms |

| 0 / 0 |
