mysql डेटाबेस संरचना/डिजाइन




database-design entity-relationship (2)

मैं इस के लिए एक शीर्षक के बारे में नहीं सोच सकता था और इसलिए यह भी नहीं पता था कि मुझे खुद के लिए शोध कहाँ शुरू करना है। मुझे एक डाटाबेस बनाना होगा जहां मेरे पास सीडी / डीवीडी के लिए एक टेबल है लेकिन उन पर मनोरंजन के प्रकार को मेटाडेटा / सूचना के संदर्भ में अलग-अलग विशेषताओं की आवश्यकता है उदाहरण के लिए संगीत सीडी में कलाकार, प्रकाशक, निर्माता, सीडीएनओ है आदि। जबकि सॉफ़्टवेयर का एक टुकड़ा समानताएं हो सकती है, लेकिन कुछ ऐसे हैं जो संगीत अभ्यस्त हैं और संभवतः फिल्मों और खेलों के साथ समान हैं। और इसलिए मुझे यकीन नहीं है कि ईआर आरेख के अनुसार यह कैसे काम करेगा, अब तक मैंने तय किया है:

आइटम तालिका या स्टॉक तालिका में होने वाली सीडी / डीवीडी अभी तक नाम पर निश्चित नहीं है।

tbl_items -> item_id, item_format (डीवीडी या सीडी, शायद blu-ray या hd-DVD को axpand), item_entertainment_type (संगीत, मूवी आदि) <--- शायद दूसरे में यकीन नहीं है एक मेटाडेटा तालिका में विदेशी कुंजी, ऐसा इसलिए है कि जब नई सीडी / डीवीडी के लिए डिलीवरी बनायी जाती है, तो मेटाडाटा पहले से मौजूद है, तो मैं सिर्फ एक नया आइटम दर्ज कर रहा हूं और मेटाडाटा और आइटम (आइटम> मेटा) के बीच कई लोगों के लिए यह एक है।

मुझे लगता है कि सवाल यह है, क्या यह खराब व्यवहार है कि वह शून्य विदेशी विदेशी फ़ील्ड है और बस इसे चुनें कि किस संबंध में कोई रिश्ता जोड़ा जाए, इसलिए musicMeta_id INT NULL, FOREIGN KEY musicMetaID REFERENCES tbl_musicMeta(musicMeta_id) प्रत्येक प्रकार के लिए ऐसा है? या किसी तरह उन्हें मर्ज, या वहाँ एक चाल डेटाबेस है।

मैं PHP के साथ MySQL का उपयोग कर रहा हूँ

धन्यवाद!


मेरी राय: FOREIGN KEYs छुटकारा पायें; बस सुनिश्चित करें कि आपके पास उपयुक्त INDEXes


कोई सामान्य नियम या बेस्ट प्रैक्टिस नहीं है, विदेशी कुंजी को नल नहीं होना चाहिए। कई बार यह एक इकाई के लिए एकदम सही मायने रखता है ताकि दूसरे संस्था के साथ संबंध न हो। उदाहरण के लिए, आपके पास ट्रैक वाले कलाकारों की एक टेबल हो सकती है, लेकिन फिलहाल, आपके पास उन कलाकारों द्वारा रिकॉर्ड की गई कोई सीडी नहीं है

मीडिया (सीडी, डीडी, ब्ल्यूआर), जो संगीत / ऑडियो या सॉफ़्टवेयर हो सकते हैं, के लिए आपके पास आम और फिर दो विदेशी कुंजी, प्रत्येक एक्सटेंशन तालिका (ऑडियोडेटा और सॉफ्टवेयरडेटा) में एक सूचना के साथ एक मेज हो सकती है, लेकिन एक NULL होना चाहिए यह एक ऐसी स्थिति को प्रस्तुत करता है जिसे अन्य बातों के अलावा, एक अनन्य चाप भी कहा जाता है। यह आम तौर पर माना जाता है ... समस्याग्रस्त

जावा या सी ++ जैसे ओ ओ भाषा में एक सुपर क्लास और दो व्युत्पन्न कक्षाओं के बारे में सोचें रिलेशनल स्कीमा में प्रतिनिधित्व करने का एक तरीका यह है:

create table Media(
    ID      int not null, -- identity, auto_generated, generated always as identity...
    Type    char( 1 ) not null,
    Format  char( 1 ) not null,
    ... <other common data>,
    constraint PK_Media primary key( ID ),
    constraint FK_Media_Type foreign key( Type )
        references MediaTypes( ID ), -- A-A/V, S-Software, G-Game
    constraint FK_Media_Format foreign key( Format )
        references MediaFormats( ID ) -- C-CD, D-DVD, B-BluRay, etc.
);
create unique index UQ_Media_ID_Type( ID, Type ) on Media;
create table AVData( -- For music and video
    ID       int not null,
    Type     char( 1 ) not null,
    ... <audio-only data>,
    constraint PK_AVData primary key( ID ),
    constraint CK_AVData_Type check( Type = 'A',
    constraint FK_AVData_Media foreign key( ID, Type )
        references Media( ID, Type )
);
create table SWData( -- For software, data
    ID       int not null,
    Type     char( 1 ) not null,
    ... <software-only data>,
    constraint PK_SWData primary key( ID ),
    constraint CK_SWData_Type check( Type = 'S',
    constraint FK_SWData_Media foreign key( ID, Type )
        references Media( ID, Type )
);
create table GameData( -- For games
    ID       int not null,
    Type     char( 1 ) not null,
    ... <game-only data>,
    constraint PK_GameData primary key( ID ),
    constraint CK_GameData_Type check( Type = 'G',
    constraint FK_GameData_Media foreign key( ID, Type )
        references Media( ID, Type )
);

अब अगर आप एक फिल्म की तलाश कर रहे हैं, तो आप एवीडीटा टेबल की खोज करते हैं, फिर बाकी सूचनाओं के लिए मीडिया टेबल के साथ जुड़ें और सॉफ्टवेयर या गेम्स के साथ। यदि आपके पास आईडी मान है, लेकिन पता नहीं है कि किस तरह से है, तो मीडिया तालिका और टाइप वैल्यू में आपको बताएगा कि इन तीनों में से कौन सी डेटा टेबल शामिल होंगी। मुद्दा यह है कि एफके जेनेरिक टेबल का जिक्र कर रहा है , न कि उसके पास।

बेशक, एक फिल्म या गेम या सॉफ़्टवेयर को एक से अधिक मीडिया प्रकार पर रिलीज़ किया जा सकता है, ताकि आप Media टेबल और संबंधित डेटा टेबल के बीच प्रतिच्छेदन तालिकाएं हो सकें। ओटोह, ये आम तौर पर विभिन्न एसकेयू के साथ लेबल किए जाते हैं ताकि आप उन्हें अलग-अलग आइटम के रूप में भी इस्तेमाल कर सकें।

कोड, जैसा आप उम्मीद कर सकते हैं, काफी जटिल हो सकते हैं, हालांकि बहुत खराब नहीं है। ओहह, हमारा डिज़ाइन लक्ष्य कोड सादगी नहीं है बल्कि डेटा अखंडता है। यह मिश्रण करना असंभव बनाता है, उदाहरण के लिए, मूवी आइटम के साथ गेम डेटा और आप खेतों का एक सेट होने से छुटकारा पायें जहां केवल एक का मान होना चाहिए और दूसरों को रिक्त होना चाहिए।





entity-relationship