AMcoder - javascript, python, java, html, php, sql

Երկու հիմնական բանալի

this

ահա իմ մասնակի տվյալների բազայի պատկերավոր ներկայացումը: BrandNoSuppliar աղյուսակի հիմնական բանալին է, որն օգտագործվում է որպես օտար բանալի ուրիշների համար:

LotDetails Աղյուսակում ինձ անհրաժեշտ է BrandName որպես օտար բանալի: Սա անհեթեթ է թվում, քանի որ ես կարող եմ դա անել

  1. մեկ հիմնական բանալի ԿԱՄ
  2. կոմպոզիտային բանալի

որը կօգտագործվի որպես արտաքին բանալի:

Ես գիտեմ, որ կարող եմ օգտագործել BrandNo-ը որպես օտար բանալի և Ցուցադրել BrandName-ը, բայց հանուն ԳԻՏԵԼԻՔԻ (և այո, իհարկե) ես ուզում եմ իմանալ, որ

Հնարավո՞ր է աղյուսակի երկու ատրիբուտները որպես արտաքին բանալիներ առանձին օգտագործել տարբեր աղյուսակներում:

Խմբագրված է

BrandNo-ը պարզապես սերիական համար է, և ապրանքանիշի անվանումը կարող է լինել ցանկացած ապրանքանիշի անուն: BrandNo-ն անհրաժեշտ է 4 աղյուսակում, ինչպես ցույց է տրված, մինչդեռ BrandName-ն անհրաժեշտ է միայն մեկ աղյուսակում: Շնորհակալություն

27.02.2014

  • Mysql-ում (innodb) կարող եք հղում ստեղծել ցանկացած այլ (ինդեքսավորված) սյունակին: Այս դեպքում պարզապես ստեղծեք նրանց համար յուրահատուկ ինդեքս։ 28.02.2014
  • Այո, դուք կարող եք օգտագործել աղյուսակի ցանկացած ինդեքս որպես օտար բանալի, պարտադիր չէ, որ այն առաջնային լինի: Այնուամենայնիվ, այն պետք է լինի ինդեքսավորված սյունակ: Անհրաժեշտ չէ, որ դա նույնպես եզակի բանալի լինի, բայց շատ դեպքերում եզակիը ավելի հարմար կլինի, քան սովորական ինդեքսը: 28.02.2014
  • FYI. ճիշտ ուղղագրությունն է մատակարար: 28.02.2014
  • :D db-ումս ուղղումներ կանեմ։ Շնորհակալություն 28.02.2014

Պատասխանները:


1

Այո, դա միանգամայն հնարավոր է: Ենթադրելով, որ BrandName-ը ինքնին թեկնածուի բանալին է, ապա սկզբունքորեն կարող եք հղում կատարել այն ճիշտ այնպես, ինչպես BrandNo-ն: Այդ դեպքում BrandName-ը և BrandNo-ը կոմպոզիտային բանալի չեն լինի, նրանք երկուսն էլ կլինեն առանձին թեկնածուների բանալիներ:

Պայմանականորեն և պարզության և օգտագործման համար հեշտ է ընտրել յուրաքանչյուր աղյուսակում ընդամենը մեկ բանալի, որը կօգտագործվի օտարերկրյա բանալիների հղումների համար: Սովորաբար (ոչ միշտ) դա այն է, որը նշանակված է որպես «առաջնային» բանալի, բայց դա պարտադիր չէ, որ այդպես լինի, եթե այլ կերպ անելու լավ պատճառ գտնեք:

27.02.2014
  • Գրեթե բոլորը տալիս են նույն և ճիշտ պատասխանը։ Այս Պատասխանն ավելի հասկանալի էր և ստացվեց: Ստեղծելով (BrandName) հատկանիշը որպես եզակի և օգտագործելով այն որպես FK: Շնորհակալություն 28.02.2014

  • 2

    Այո՛ FK-ն կարիք չունի հղում կատարել PK-ին, դուք նույնիսկ կարիք չունեք հղում կատարել ինդեքսավորված սյունակին, բայց հանուն հարաբերական ամբողջականության (և ողջախոհության) դուք պետք է հղում կատարեք եզակի արժեքավոր սյունակին (այդ իսկ պատճառով մենք «սիրում ենք» հղում կատարել PK կամ առնվազն եզակի ոչ կլաստերային ինդեքսավորված սյունակ):

    Մի փոքր տարօրինակ է հնչում, բայց դուք կարող եք կառուցել հարաբերական աղյուսակAB՝ պահելով IdA, IdB և tableA և tableB հղումներ tableAB համապատասխան սյունակները:

    btw. աղյուսակը պետք չէ ունենալ PK, բայց չի կարող գոյություն ունենալ երկու PK: Ընդհանուր առմամբ, աղյուսակը ֆիզիկական պատվիրված է PK-ի կողմից:

    27.02.2014

    3

    Երբ ստեղծում եք օտարերկրյա բանալիների հղումներ, հղումով աղյուսակի բանալին պետք է լինի հիմնական բանալի: Անիմաստ է «մասնակի» անդրադարձ ունենալ։

    Փոխարենը, դուք պետք է ունենաք Brands աղյուսակ, որն ունի հիմնական բանալին (գուցե BrandId, գուցե BrandName -- ես նախընտրում եմ առաջինը): Այնուհետև աղյուսակները, որոնք ապրանքանիշի մասին տեղեկատվության կարիք ունեն, կարող են ուղղակիորեն հղում կատարել այս աղյուսակին:

    27.02.2014
  • Ինչպես ես կարդացի այն, կարծում եմ, որ բանն այն է, որ BrandName-ն արդեն նախատեսված է որպես հիմնական և ոչ թե կոմպոզիտային մաս մատակարարների աղյուսակում: 28.02.2014
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..