MySql array

Lep pozdrav!

Zanima me kako se lotevate array-ov v tabelah. Vem, da se jih da vstaviti (serialize()), vendar se mi zdi, da je skoraj vedno bolje uporabljati novo tabelo namesto array-a.

Mnenja?

9 odgovorov

PostgreSQL podpira array-e nativno, kar pomeni, da imaš lahko stolpec tipa recimo BIGINT[][]. Edina omejitev je ta, da morajo biti vsi elementi istega tipa, se pravi ne moreš imet arraya polovico INT, polovico TEXT.

In ne, ni res, da je skoraj vedno bolje uporabiti novo podatkovno tabelo.

1

Pa še tole, namesto serialize() rajš uporab json_encode(), če so podatki enostavnih tipov. Ker v primeru, da pride do korupcije, imaš še neke šanse, da podatke rešiš. Če boš šaltal na PostgreSQL, maš prov tip stolpca JSON, ki garantira sintaktično pravilnost.

1

Po moje je odvisno ali bi rad, da je zadeva searchable ali ne. Drugače pa jaz namesto serialize() uporabljam JSON.

1

Če ima MySQL, potem seveda, če hoče zadevo indeksirat, potem je prisiljen normalizirat podatek in prestavit zadevo v novo tabelo. Postgres lahko indeksira tudi tabelarni tip, recimo BIGINT[][].

Se pravi, če ne rabiš nikoli delat nobenih poizvedb po podatkih, potem je serializacija odgovor (JSON, če so podatki enostavni, sicer pa serialize(), če imaš poljubne (svoje) razrede).

2

Jaz sem iz prakse ugotovil, da je za array v stolpcu edini legalen primer, ko imaš neko skupino podatkov, ki niso searchable in sortable, najpomembnejše pa da niso v relaciji z nobenim drugim podatkom, ne v isti tabeli, še manj pa v drugih, saj je tako nemogoče ohranjati podatkovno integriteto (razen, če želiš vse možne dogodke programirati sam).
Primer v moji aplikaciji je seznam stolpcev tabele izdelkov. Te uporabnik obkljuka z namenom da naj se mu prikazujejo v backend katalogu (enim strankam so pomembni eni, drugim pa drugi podatki).

1

Hvala za odgovore mojstri, dobil sem točno odgovore ki sem jih potreboval! Problem sem imel saj:

Imam podatkovne pare (število le teh variira) in morajo biti shranjeni v enem stolpcu vrstice, saj gre za lastnosti.
Predstavljajte si, da morate v tabelo vnesti:

Vrstica 1 stolpec 1:
3 črne, 2 modre

Vrstica 2 stolpec 1:
0

Vrstica 3 stolpec 1:
2 zeleni, 4 oranžne, 5 bež

Ker podatki niso iste dolžine ne gre narediti novih stolpcev.

Zadevo sem rešil preko uvedbe nove tabele. Zdi se mi najlažje in še searchable je.

Lp, Marko

Če so barve fiksne, potem v izogib raznim zatipkanim besedam narediš nekaj takega.

TABELA: barve
PRIMARY INT
TEXT ime_barve

In potem tabelo lastnost:

FOREIGN(objekt) INT // kateremu objektu pripada recimo "3 oranžne"
FOREIGN(barva) INT
INT število

1

Hvala techolog. V tem primer sicer je barv neomejeno število.

Z drugimi besedami M:N relacija "entiteta <> barva" z dodatnim podatkom 'št. kosov'.
V življenju še nisem imel problema zaradi preveč normalizirane oblike, obratno pa kolko češ :)