2016-03-29 26 views
1

Bu benim ilk gönderiim ve ben bir mysql noob'um, bu yüzden bu sorunun uzunluğu için özür dilerim.MYSQL tablo sütun kontramanı başka bir tablo sütunlarına dayanarak

CREATE TABLE `cctypevals` (
`cctypevalsKEY` integer NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`cctypeID` varchar(50) NOT NULL, FOREIGN KEY(cctypeID) REFERENCES cctype(cctypeID) , 
`value` varchar(50) ) 

cctypeID kullanıcı tablolar, örneğin 'taskSTATE' dan alan adlarını içeren,:

AMAÇ

ben mysql bu olurdu yabancı bir alanda 'cctypeID' ile, bir arama tablosu cctypevals var 'serviceTYPE', 'projectCAT' vb.

Değer alanı, bu kullanıcı tablosu alanları için yalnızca izin verilen değerleri içerir.

Böylece, örneğin bir 'çoklu' Kama arama tablosu gibi cctypevals hareket eder:

cctypeID = 'HizmetTürü'

HomeVisit döndürebilir cctypevals gelen

seçme değeri, BackToBase vb

biliyorum Her alan için tek bir arama tablosuna sahip olmak daha kolay olurdu ama bu benim sahip olduğum şey.

ben kısıtlayan (bir sql tablo oluşturmak veya deyimi değiştirmek) nasıl

SORU

, task.taskSTATE, service.serviceTYPE vb onlar sadece cctypevals değerleri kabul edebilir şöyle alanlarla tablolar. value cctypeID uygun alan adını içerir?

cevap

1

yılında oluşturmak veya check kısıtlama böyle şeyler mümkün olacaktır beri, bunu yapamam tablo deyimi değiştirmez, ancak mysql (MySQL denetim kısıtlamasını ayrıştırmak, ancak çalışmaz) henüz check kısıtlamayı uygulamamıştır.

Güncelleştirilen değer gereksinimleri karşılamıyorsa, özel kısıtlamaları ve raise an sql error message denetimlerini tetikleyen tetikleyiciler ekleyip güncellemeden önce oluşturabilirsiniz.

+0

Bunun için teşekkürler. Yani bir tetikleyicide, bir seçim çalıştırıp, değerin olup olmadığını kontrol edeyim? Bunun diğer tek yolu, mevcut arama tablosunu ayrı tablolara ayırmak mı? – reddog0000

+0

Ya da enum veya setleri kullanmak, ancak bunlar yabancı anahtarların tüm amacı bozguna uğratır. Yani, evet, ya tetikleyicileri kullanın ya da her arama türü için ayrı bir arama tablosuna sahip olun. – Shadow

+0

Tekrar teşekkürler - Buna bakacağım. – reddog0000