Her veritabanı sütun için bir kimlik, nasıl yapmalı?

7 Cevap php

Ben bir gıda veritabanı üzerinde çalışan, her besin (yağ, enerji, vitaminler, vb) özelliklerinin bir listesi vardır

These props are composed by 50 different columns of proteins, fat, carbohydrates, vitamins, elements, etc.. (they are a lot)
the number of columns could increase in the future, but not too much, 80 for extreme case
Each column needs an individual reference to one bibliography of a whole list from another table (needed to check if the value is reliable or not).

Kimlikleri düşünün, belirli bir istisna başvuru için bir numara, bir NULL val veya 0 içermelidir (başka bir tabloya işaret eder)

Ben bazı çözüm olsa da var, ama onlar çok farklı eachothers, ve ben db ile bir çaylak değilim, bu yüzden en iyi çözüm konusunda hiçbir fikrim yok.

proteinler olarak değer_1 dikkate vb karbonhidratlar gibi value_2'ye.

Düşündüm (umarım) iyi 2 alternatifler:

(1), bir varchar (? 255) 50 kimlikleri ile kolon, yani böyle bir şey:

column energy              (7.00)
column carbohydrates       (89.95)
column fats                (63.12)
column value_bil_ids       (165862,14861,816486) ## as a varchar
etc...

In this case, I can split it with "," to an array and check the ids, but I'm still worried about coding praticity... this could save too many columns, but I don't know how much could be pratical in order to scalability too. Principally, I thought this option usual for query optimization (I hope!)

(2) Bunun için, bu yüzden her bir değeri için bir ek id sütunu kullanılarak:

column energy                 (7.00)
column energy_bibl_id         (165862)
column carbohydrates          (89.95)
column carbohydrates_bibl_id  (14861)
column fats                   (63.12)
column fats_bibl_id           (816486)
etc...

Bu sütun bir weightful dizi gibi görünüyor, ama çok net sonra ilk başta herhangi bir değer sütun ve onun kimlik ilişkisi için.

(3) değerleri ve bibliyografilerden arkasında ilişkisel bir tablo oluşturma, bu yüzden

table values
energy
carbohydrates
fats
value_id --> point to table values_and_bibliographies val_bib_id


table values_and_bibliographies
val_bib_id
energy_id        --> point to table bibliographies biblio_id
carbohydrates_id --> point to table bibliographies biblio_id
fats_id          --> point to table bibliographies biblio_id


table bibliographies
biblio_id
biblio_name
biblio_year

Ben bu en iyi çözüm olup olmadığını bilmiyorum, ve birisi ışık getirmek için bana yardımcı olacak eğer ben minnettar olacaktır!

7 Cevap

Sen bu tabloyu normale gerekir. Ne yapıyorsun delilik olduğunu ve saç kaybetmenize neden olacaktır. Eğer sütun eklemeden istediğiniz ne yapabilirim böylece ilişkisel veritabanları denir. Eğer satır eklemek yüzden yapı istiyorum.

Gerçek isimlerini kullanmak ve biz bir şema dışarı kırbaç olabilir lütfen.

edit İyi düzenlemek. 3. aklı başında bir tasarıma yakın oluyor. Ama yine de bir kaynakça bir gıda şemada ne yaptığını hakkında çok belirsiz! Ben bu ne istediğiniz olduğunu düşünüyorum. Bir kaynakça bağlantılı bir gıda ve bileşenleri olabilir. Ben kaynakça bir reçete gibi olduğunu varsayıyorum?

FOODS 
id name
1   broccoli
2   chicken

COMPONENTS
id name
1   carbs
2   fat
3   energy

BIBLIOGRAPHIES
id  name           year
1  chicken soup     1995


FOOD_COMPONENTS links foods to their components
id  food_id component_id bib_id  value
 1   1         1          1       25 grams
 2   1         2          1       13 onces

Yani veri almak için bir birleşim kullanın.

SELECT * from FOOD_COMPONENTS fc
	INNER JOIN COMPONENTS c on fc.component_id = c.id
	INNER JOIN FOODS f on fc.foods_id = f.id
	INNER JOIN BIBLIOGRAPHIES b on fc.bib_id = b.id
WHERE
	b.name = 'Chicken Soup'

Eğer ciddi veritabanı yapısını redesiging dikkate almak gerekir - bu ona ilişkindir ek verileri depolamak istediğiniz zaman bir tabloya sütun ekleme tutmak için tavsiye edilmez.

Ilişkisel veritabanı yabancı anahtarların kullanımı yoluyla birbirlerine tabloları ilgili olabilir. Eğer verilerle ilişkili değerleri bir demet saklamak (değerler ya da ne olursa olsun denir) yeni bir tablo oluşturun ve sonra yeni bir tablodaki yabancı anahtar olarak orijinal tablodan id kullanmak istiyorum beri.

Eğer önerdi Böyle bir tasarım size her sütunu doldurmak gerekmez varsayarak tablosunda olacak null değerleri bolluk söz değil, yazılı büyük bir baş ağrısı sorgular yapacak ..

İşte size şema değiştirmeden gün boyu özelliklerini eklemek için izin almak verebilecek bir yaklaşım:

Tablo: Gıda - her satır sizin tarif ettiğiniz bir besindir

  • Kimlik
  • Isim
  • Tanım
  • ...

Tablo: Özellik - her satır bir gıda olabilir bir sayısal niteliktir

  • Kimlik
  • Isim
  • MinDeğer
  • MaxDeğer
  • Birim (muhtemelen 'grubu yinelenen', yani teknik olarak kendi tablosunda olmalıdır)

Tablo: Kaynakça - bunun ne olduğunu bilmiyorum, ama bunu

  • Kimlik
  • ...

Tablo: GıdaNitelik - bir niteliği sahip olan bir gıda her örneği için bir kayıt

  • Gıda
  • Nitelik
  • Bibliyografya
  • Değer

Yani aşağıdaki kayıtları olabilir

  • Gıda # 1 = Cheeseburger
  • Özellik # 1 = Yağ (Birim = Gram)
  • Bibliyografya #1 = whatever relates to cheeseburgers and fat

Bir cheeseburger yağ 30 gram varsa Ardından, Gıda sütun Özellik sütuna 1, Değer sütununda bir Kaynakça sütuna 1, ve 30 içinde 1 ile GıdaNitelik tablosunda bir giriş olacaktır.

(Eğer sayısal olmayan nitelikleri ile başa çıkmak için bazı başka mekanizmaları gerekebilir, unutmayın.)

Data Modeling hakkında okuyun ve Database Normalization bu tür sorunlar yaklaşım konusunda daha fazla bilgi için ...

Bir tablo için daha fazla sütun ekleme bir NoSQL sistemi dışında, DB dünyanın önerilmez ne de popüler değil.

Niyetlerinizi lütfen ayrıntılı :)

Neden $ tanrı aşkına, sütunlar tarafından yapıyorsun? Bu şekilde delilik yatıyor!

Satır içine bu tabloyu ayrıştırmak, sonra her satırda bir sütun koydu. Bu for ne olduğu hakkında daha fazla bilmek ve bu gibi neden o olmadan, daha fazla söylemek zor.

Ben senin soru bir kaç kez yeniden okumak ve ben are in fact ilişkisel şema çalışıyor ve endişe sütun sayısında bir tablo ile ilişkilidir (80 olasılıkla söz) ile olduğuna inanıyorum. Ben bir tablo üzerinde 80 sütun bir hesaplama açısından iyi olduğunu size temin ederim. Sizin veritabanı işleyebilir. Bir kodlama açısından bakıldığında, yüksek olabilir.

Bir sütun eklemek istediğiniz zaman Önerilen (1) başarısız olur. Etkili bir virgülle ayrılmış tek bir sütunda tüm sütunları saklıyoruz. Kötü.

I (2) anlamıyorum. Bu aynı sesler (3)

(3) ruhuna doğru, ancak örnek bulanık ve belirsiz. Whittle senin beş columsn falan basit bir durumda aşağı sorun ve soruyu düzenlemek veya yeniden yayınlamak.

Kısacası, şu anda sütun sayısı konusunda endişelenmeyin. Öncelik listesinde düşük.

Eğer her kaydın, sen could, bir tutam, tefrika olarak () / unserialize () bir ilişkisel dizi eklemek istiyorum ve içine koymak istiyorum keyfi anahtar / değer çiftleri dayalı sorgular oluşturmak gerek varsa Tek bir alan