2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
De ene licentie is bijvoorbeeld enkel een licentiecode, andere licenties kunnen weblinkjes naar CMS zijn met user/pass. Andere is weer een regfile voor installatie. Andere is weer een .exe voor installatie.ThomasG schreef op donderdag 30 mei 2013 @ 22:51:
Wat is er precies verschillend aan de licentie tabellen? Je kunt ze wellicht samenvoegen tot één tabel. Je krijgt dan waarschijnlijk een overhead, maar dat is de enigste manier. Er zijn helaas - of helaas, er is een goede reden voor - geen conditional foreign keys.
Er zijn veel soorten mogelijk en die kunnen later uitgebreid worden.
Je zou het kunnen zien als een extended koppeltabel tussen users en producten.
Users kunnen meerdere producten (hetzelfde) kopen, maar een product kan ook door meerdere mensen worden gekocht. n-n relatie dus, maar dan met variabele koppeltabel (gebaseerd op value in een veld)
Edit:
Het kan natuurlijk altijd handmatig (door gewoon handmatig de juiste tabel op te halen), maar dat vereist steeds extra code
[ Voor 23% gewijzigd door F.West98 op 30-05-2013 22:57 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Dat kan dus worden samengevoegd naar één tabel. Je zult een soort compromis moeten doen. Ik weet niet wat je precies van plan was, maar de bestanden kun je beter niet in de tabel zelf opslaan. Je hebt in de tabel een veld die verwijst naar een pad (website, bestand, ed.). Je kunt dit met C# afhandelen. Wellicht dat je de licentiecode in het zelfde veld kwijt kunt, maar is niet helemaal netjes. Username en password kun je als het HTTP-auth is ook al in de url opslaan, anders een apart veld. Je zult dan misschien nog een ENUM veld kunnen gebruiken, om aan te geven wat voor type het is (website, bestand, licentie, ed.).F.West98 schreef op donderdag 30 mei 2013 @ 22:54:
[...]
De ene licentie is bijvoorbeeld enkel een licentiecode, andere licenties kunnen weblinkjes naar CMS zijn met user/pass. Andere is weer een regfile voor installatie. Andere is weer een .exe voor installatie.
Er zijn veel soorten mogelijk en die kunnen later uitgebreid worden
Heel handig!sig69 schreef op donderdag 30 mei 2013 @ 22:59:
Misschien dat je iets kan met Table per type inheritance?
Enige nadeel is:
- Bij proberen van maken van een ADO.NET model ging alles mis in m'n project. Models verdwenen, enz. enz.
- Je hebt dan voor elke licentie een nieuw product-item nodig. Helaas.
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Ik denk dat ik t wel in een model kan oplossen, maar niet direct met mappings, maar meer handmatig.sig69 schreef op vrijdag 31 mei 2013 @ 10:49:
Hmm dat is jammer. Misschien is je datamodel er niet helemaal voor geschikt. Anyway, je hebt wel weer iets geleerd, wellicht dat het in de toekomst van pas komt.
Ik kan de licentiekoppeling ook een handmatige get set meegeven. Ik zal er vanmiddag nog eens naar kijken
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Ik gebruik idd CF...Megamind schreef op vrijdag 31 mei 2013 @ 18:10:
Je kan een property maken op je model object welke een select statement doet. Ik neem dat je Code First gebruikt, dan kan je het simpel aanpassen. Als je EDMX gebruikt dan zal je even moeten graven.
Ik had idd al zoiets in gedachten, maar ik moet nog even kijken hoe ik de set ga implementeren
Wait. Kan dat niet gewoon een CREATE TABLE zijn?
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
En kijk ook eens naar Code-Migrations dan hoef je je geen zorgen te maken over CREATE TABLE statements of andere SQL meuk.
[ Voor 42% gewijzigd door Megamind op 31-05-2013 21:16 ]
Ik weet niet zeker of het moet, maar valt dat dynamisch te doen dmv een CMS-achtige oplossing? Dus gewoon code die een tabel aanmaakt. Als het niet moet is dit idd een oplossing.Megamind schreef op vrijdag 31 mei 2013 @ 21:16:
Je hebt aan 1 tabel genoeg, maak daar een FK op de ProductID en dan heb je het toch?
En kijk ook eens naar Code-Migrations dan hoef je je geen zorgen te maken over CREATE TABLE statements of andere SQL meuk.
edit:
Ik kan een ook een inherited oplossing maken. Een algemene licenties tabel die dan standaarddingen bevat en dan models die 't inheriten...
[ Voor 13% gewijzigd door F.West98 op 31-05-2013 22:47 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Product Tabel
- Product Id
- Naam
- Etc
- FK naar License
- - License naam
- - License ID
Ik vind dat eerlijk gezegd duidelijker omdat je dan duidelijk bezig bent met license info, anders krijg je velden die niets met producten te maken hebben gemixt in je productentabel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public class Licentie { /* Random shit */ public virtual Product product { get; set; } /* Product waarbij de licentie hoort */ public virtual User user { get; set; } /* Koper */ } public class Licentie_type1 : Licentie { public string type1_specific { get; set; } public string type1_specific2 { get; set; } } public class Licentie_type2 : Licentie { public string type2_specific { get; set; } public string type2_specific2 { get; set;} } |
Waarmee je, als het type niet bekend is ('aparte behandeling heeft'), alsvolgt alle properties en waardes krijgen:
1
2
3
4
5
6
7
8
9
| string toreturn = ""; foreach ( Licentie licentie in licentie_list) { var props = licentie.GetType().GetProperties(); toreturn += "<br><br>"; foreach(var prop in props) { toreturn += prop.Name + " - " + prop.GetValue(licentie, null).ToString() + "<br>"; } } return toreturn; |
Uitbreidbaar dus. Of was er een nog betere oplossing?
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Je kon ook gewoon een enum maken met LicentieType, of als je dieper wilt normalizeren in je database. Nu met overerven zal het lastiger worden om dit in je database te krijgen natuurlijk.
Dat is waar, en waarschijnlijk is het minder compatibel als je in PHP dezelfde DB wil gebruiken, maar het werktMegamind schreef op zaterdag 01 juni 2013 @ 16:47:
Als deze oplossing voor jou werkt is dat de "beste" oplossingMaar er zijn ook andere manieren op het probleem aan te pakken.
Je kon ook gewoon een enum maken met LicentieType, of als je dieper wilt normalizeren in je database. Nu met overerven zal het lastiger worden om dit in je database te krijgen natuurlijk.
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Verwijderd
normaliseer eens het hele model uit.
Op de achtegrond (daadwerkelijke DB) gaat het ook zo, maar het was enkel om het voor mij beheer- en ontwikkeltechnisch makkelijker (uiteindelijk) te maken.ThomasG schreef op zaterdag 01 juni 2013 @ 17:31:
Ik denk dat het probleem is dat hij probeert te over-normaliseren. Dan krijg je problemen als dit, wat er vaak op wijst dat er iets fout is gegaan in je (normalisatie-)proces. Ik ben er vooralsnog niet van overtuigd waarom dit niet gewoon in één tabel zou kunnen, je slaat alleen paden naar websites/bestanden of een licentienummer op.
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI