1

Тема: Створення таблиці з подібними полями

Добрий вечір!

Порадьте як краще вирішити проблему при створені таблиць.

є таблиця worldcoins
з полями:
worldcoins_id
...
material_id
metal_id
sample_id
weight
ozt(Тр.унція)

планую ще додати аналогічні поля для біметалевих монет.

Підскажіть як правилніше??
вцій самій таблиці додати поля

для центру
material_id_center
metal_id_center
sample_id_center
weight_center
ozt_center(Тр.унція)

та для краю
material_id_ring
metal_id_ring
sample_id_ring
weight_ring
ozt_ring(Тр.унція)

Чи створити нову таблицю
coinsparameter з полями:
coinsparameter_id
material_id
metal_id
sample_id
weight
ozt(Тр.унція)

а в табці worldcoins створити поля
coinsparameter_id
coinsparameter_id_center
coinsparameter_id_ring
і ці поля повязати зі створеною таблицею.

2

Re: Створення таблиці з подібними полями

Варіант з окремою таблицею це більш вірний реляційний підхід, бо фізичний склад монети стає сутністю яку кверяємо багато разів. Зараз дуже коротко бо з довгої дороги, зможемо розглянути приклад схеми пізніше.

3 Востаннє редагувалося Romanvolja (Вчора 22:02:59)

Re: Створення таблиці з подібними полями

Зробив по другому варіанту але при виведенні запиту не знаю як уникнути конфлікту бо поле таблиці

coinsparameter_id одне  а в запиті більше варіантів.

Для усієї вибірку зробив а як вибрати ще для центру чи краю в одному запиті не можу зрозуміти.


  with qrSelectAllTables do
    begin
      Prepared;
      with SQL do
        begin
          Clear;
          Add(
            'SELECT'+
              ' worldcoins.worldcoins_id'+
              ', coin.coin_name'+
              ', worldcoins.topic'+  
             ....
              ', material.material_name'+
              ', metal.metal_name'+
              ', sample.sample_name'+
              ', coinparameter.weight'+
              ', coinparameter.ozt'+
             ....
       {як далі зробити не можу збагнути }
              {
              ', material_id_center'+
              ', metal_id_center'+
              ', sample_id_center'+
              ', weight_center'+
              ', ozt_center'+
              }

              );
          Add(
            'FROM ((((((((((   (((((   ((((('+
              ' worldcoins'+
              ' LEFT JOIN coin ON worldcoins.coin_id=coin.coin_id)'+
              ' LEFT JOIN country ON worldcoins.country_id=country.country_id)'+
              .....
              ' LEFT JOIN structure ON worldcoins.structure_id=structure.structure_id)'+
              ' LEFT JOIN coinparameter ON worldcoins.coinparameter_id=coinparameter.coinparameter_id)'+

              ' LEFT JOIN material ON coinparameter.material_id=material.material_id)'+
              ' LEFT JOIN metal ON coinparameter.metal_id=metal.metal_id)'+
              ' LEFT JOIN sample ON coinparameter.sample_id=sample.sample_id'
              );
        end;